﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CAGFIP.DataAccess.DataSetTableAdapters;
using CAGFIP.DataAccess;

namespace CAGFIP.Edicao
{
    public class PerguntaDAO : IPerguntaDAO
    {
        #region Fields

        private PerguntaTableAdapter perguntaAdapter;
        private static readonly PerguntaDAO instance = new PerguntaDAO();

        #endregion
        
        #region Constructors

        private PerguntaDAO() { }

        #endregion

        #region Properties

        public static PerguntaDAO Instance
        {
            get { return instance; }
        }

        private PerguntaTableAdapter PerguntaAdapter
        {
            get { return this.perguntaAdapter ?? (this.perguntaAdapter = new PerguntaTableAdapter()); }
        }

	    #endregion

        #region Methods

        public void AlterarPergunta(Pergunta pergunta)
        {
            PerguntaAdapter.AtualizarPergunta(pergunta.Enunciado, pergunta.IdAssunto, pergunta.AlternativaCorreta, pergunta.AlterntivasIncorretas[0], pergunta.AlterntivasIncorretas[1], pergunta.AlterntivasIncorretas[2], pergunta.AlterntivasIncorretas[3], pergunta.Id);
        }

        public void CadastrarPergunta(Pergunta pergunta)
        {
            PerguntaAdapter.CadastrarPergunta(pergunta.Enunciado, pergunta.IdAssunto, pergunta.AlternativaCorreta, pergunta.AlterntivasIncorretas[0], pergunta.AlterntivasIncorretas[1], pergunta.AlterntivasIncorretas[2], pergunta.AlterntivasIncorretas[3]);
        }

        public void RemoverPergunta(int idPergunta)
        {
            PerguntaAdapter.RemoverPergunta(idPergunta);
        }

        public Pergunta VisualizarPergunta(int idPergunta)
        {
            return CriaPergunta(PerguntaAdapter.VisualizarPergunta(idPergunta)[0]);
        }

        public List<Pergunta> VisualizarPerguntas()
        {
            List<Pergunta> list = new List<Pergunta>();

            var ds = PerguntaAdapter.VisualizarPerguntas();

            foreach (CAGFIP.DataAccess.DataSet.PerguntaRow row in ds)
            {
                list.Add(CriaPergunta(row));
            }

            return list;
        }


        #endregion

        public int BuscarQtdePerguntas(List<int> idAssuntos)
        {
            int count = 0;

            foreach (var pergunta in this.VisualizarPerguntas())
                if (idAssuntos.Contains(pergunta.IdAssunto))
                    count++;

            return count;
        }

        public List<Pergunta> VisualizarPerguntas(List<int> idAssuntos)
        {
            var perguntas = new List<Pergunta>();

            foreach (var pergunta in this.VisualizarPerguntas())
                if (idAssuntos.Contains(pergunta.IdAssunto))
                    perguntas.Add(pergunta);

            return perguntas;
        }

        public DataSet.PerguntaDataTable VisualizarPerguntaDataSet()
        {
            return PerguntaAdapter.VisualizarPerguntas();
        }

        private Pergunta CriaPergunta(CAGFIP.DataAccess.DataSet.PerguntaRow row)
        {
            string[] alterntivasIncorretas = new string[4];
            alterntivasIncorretas[0] = row.AlternativaIncorreta1.Trim(' ');
            alterntivasIncorretas[1] = row.AlternativaIncorreta2.Trim(' ');
            alterntivasIncorretas[2] = row.AlternativaIncorreta3.Trim(' ');
            alterntivasIncorretas[3] = row.AlternativaIncorreta4.Trim(' ');
            return new Pergunta(row.Id, row.AssuntoId, row.Enunciado.Trim(' '), row.AlternativaCorreta.Trim(' '), alterntivasIncorretas);
        }
    }
}
